/// <reference lib="webworker" />

type WorkerMessage<T = any> = {
    id: symbol;
    type: 'task' | 'result' | 'error';
    data?: T;
    error?: Error;
};

// 注册任务处理器（使用者需实现具体逻辑）
type TaskHandler = (data: any) => any | Promise<any>;
const taskHandlers: Record<string, TaskHandler> = {};

// 暴露给主线程的注册方法（在Worker中调用）
self.addEventListener('message', async (e: MessageEvent<WorkerMessage>) => {
    const { id, type, data } = e.data;

    if (type !== 'task') return;

    try {
        // 这里可以根据data.type分发不同任务（示例：默认处理）
        // 实际使用时可扩展为多任务类型（如if(data.type === 'calc') { ... }）
        const result = await (data.handlerKey
            ? taskHandlers[data.handlerKey]?.(data.payload)
            : defaultHandler(data)
        );

        // 发送结果到主线程
        self.postMessage({
            id,
            type: 'result',
            data: result
        } as WorkerMessage);
    } catch (error) {
        // 发送错误到主线程
        self.postMessage({
            id,
            type: 'error',
            error: error instanceof Error ? error : new Error(String(error))
        } as WorkerMessage);
    }
});

// 默认任务处理器（可覆盖）
function defaultHandler(data: any) {
    return data; // 示例：直接返回数据
}

// 供Worker内部注册自定义任务的方法（示例）
export function registerHandler(key: string, handler: TaskHandler) {
    taskHandlers[key] = handler;
}